package org.springblade.modules.notice.annotation;

import org.springblade.modules.notice.enums.BusinessType;
import org.springblade.modules.notice.enums.TriggerNodeEnum;

import java.lang.annotation.*;

/**
 * @Description 消息通知注解
 * @Author ysq
 * @Date 2024/11/14
 **/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MsgNotice {

	/**
	 * 业务类型
	 * @return
	 */
	BusinessType businessType();

	/**
	 * 触发节点
	 * @return
	 */
	TriggerNodeEnum node();

	/**
	 * 0-参数来源为方法参数，1-参数来源为方法返回值
	 */
	int parameterSource() default  0;

	/**
	 * 参数名称
	 * 当是基础类型、map类型,直接根据参数名称获取参数值
	 * 当是实体类型时：
	 *   1、入参：根据参数名称获取参数值，比如：入参是（User user）,@MsgNotice(parameterName = "user.id"),获取到对象user的id;
	 *   2、出参：由于出参没有对象名，这里固定出参对象名为“result"，比如：出参是一个User对象,@MsgNotice(parameterName = "result.id"),获取出参对象id;
	 * @return 返回参数名称对应的值
	 */
	String parameterName() default "id";

}
